package org.ehe.erp.domain.quality;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.ehe.common.mybatis.core.domain.BaseEntity2;
import org.hibernate.validator.constraints.Length;

import java.time.LocalDateTime;

/**
 * 质检异常反馈实体类
 *
 * @author zhangnn
 * @className ErpQualityFeedback
 * @description 质检异常反馈表实体，记录质检不合格时的反馈信息和处理过程
 * @date 2025-09-10 15:00:00
 */
@Data
@TableName("erp_quality_feedback")
public class ErpQualityFeedback extends BaseEntity2 {

    /** 反馈ID */
    @TableId(type = IdType.AUTO)
    private Long id;

    /** 反馈单号 */
    @NotBlank(message = "反馈单号不能为空")
    @Length(max = 255, message = "反馈单号长度不能超过255字符")
    private String feedbackNo;

    /** 质检任务ID */
    @NotNull(message = "质检任务ID不能为空")
    private Long taskId;

    /** 质检记录ID */
    private Long recordId;


    /** 反馈记录标识 project、quality、purchase 等 **/
    private String recordType;

    /** 反馈类型（1质量问题、2物料问题、3工艺问题、4其他） */
    @NotNull(message = "反馈类型不能为空")
    private Integer feedbackType;

    /** 问题描述 */
    @NotBlank(message = "问题描述不能为空")
    @Length(max = 2000, message = "问题描述长度不能超过2000字符")
    private String problemDesc;

    /** 原因分析 */
    @Length(max = 2000, message = "原因分析长度不能超过2000字符")
    private String reasonAnalysis;

    /** 严重程度（1一般、2严重、3非常严重） */
    private Integer severityLevel;

    /** 处理状态（0待处理、1处理中、2已处理、3已关闭） */
    private Integer status;

    /** 反馈人Id */
    private Long feedbackPersonId;

    /** 反馈人 */
    @Length(max = 100, message = "反馈人长度不能超过100字符")
    private String feedbackPerson;

    /** 反馈时间 */
    private LocalDateTime feedbackTime;

    /** 处理人ID */
    private Long handlerId;

    /** 处理人姓名 */
    @Length(max = 100, message = "处理人姓名长度不能超过100字符")
    private String handlerName;

    /** 处理时间 */
    private LocalDateTime handleTime;

    /** 处理结果 */
    @Length(max = 2000, message = "处理结果长度不能超过2000字符")
    private String handleResult;

    /** 相关批次ID列表(JSON格式) - 用于批次追溯 */
    @Length(max = 1000, message = "相关批次ID列表长度不能超过1000字符")
    private String relatedBatchIds;

    /** 疑似问题物料ID */
    private Long suspectedMaterialId;

    /** 疑似问题批次ID */
    private Long suspectedBatchId;

    /** 疑似问题供应商ID */
    private Long suspectedSupplierId;

    /**
     * 审核状态
     */
    private String approveStatus;
    /**
     * 预估完成小时数
     */
    private Integer estimatedHours;
    /**
     * 任务截止时间
     */
    private LocalDateTime taskDeadline;

    /**
     * 任务是否超期
     */
    private String isTaskTimeout;

    /**
     * 响应是否超期：处理状态：0-未处理，1-已处理，2-已超期,3-超期未处理，4超期已处理
     */
    private String isOverdue;

    /**
     * 响应 截止时间
     */
    private LocalDateTime isOverdueEndTime;
}
